[アップデート] AWS CodeBuild の Lambda コンピューティング環境でもカスタムイメージを使えるようになり、マネージド型イメージに含まれていないツールも使いやすくなりました
いわさです。
今朝、AWS CodeBuild が Lambda コンピューティングのカスタムイメージをサポートするというアップデートアナウンスがありました。
昨年 11 月に CodeBuild の実行環境に従来の EC2 ではなく Lambda を選択することが出来るようになりました。
これによって、EC2 コンピューティング環境よりも高速に起動できるビルド環境を作成出来るようになっています。
ただし、これまでは Lambda 環境の場合はマネージド型イメージのみがサポートされており、ビルド用に使えるツールとしてもプリインストールされた以下の特定バージョンのみがサポートされていました。
- AWS CLI v2
- AWS SAM CLI
- git
- go
- Java
- Node.js
- Python
- pip
- Ruby
- .NET
EC2 と同様にカスタムイメージが選択可能に
今回のアップデートでマネージド型イメージのみでなく、カスタムイメージを Lambda 環境でも使用出来るようになります。
マネージド型イメージで含まれていないツールやバージョンをプリインストールした環境が必要な場合に使用するこが出来そうです。
環境タイプとしては ARM Lambda と Linux Lambda の 2 つが用意されています。
Lambda では Windows や GPU は引き続きサポート外で、x86 と ARM アーキテクチャのイメージがそれぞれ使えます。
また、イメージは Amazon ECR 経由での取得となります。
EC2 の場合だと、外部のレジストリを指定することが出来たのですが、Lambda の場合だと ECR のみとなるようです。
Rust 公式イメージを CodeBuild Lambda 環境で試してみた
今回はお試しで Rust の公式イメージを取得して CodeBuild Lambda で使えるのかを試してみました。
Rust 公式イメージをダウンロードして ECR へプッシュ
よく考えたらプルスルーキャッシュを使えたかもなと後から気がついたのですが、今回は Docker からプルしたイメージにタグ付けし、ECR へプッシュしています。
% docker pull rust Using default tag: latest latest: Pulling from library/rust 6ee0baa58a3d: Pull complete 992a857ef575: Pull complete 3861a6536e4e: Pull complete e5e6faea05ea: Pull complete 6a4969aa4e1d: Pull complete Digest: sha256:d36f9d8a9a4c76da74c8d983d0d4cb146dd2d19bb9bd60b704cdcf70ef868d3a Status: Downloaded newer image for rust:latest docker.io/library/rust:latest % docker tag docker.io/library/rust:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0320reg:latest % docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0320reg:latest The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0320reg] a8edf9f37ec8: Pushed a2ccf25052d9: Pushed b2959535127e: Pushed 39047ed7849e: Pushed 59bd0a52c319: Pushed latest: digest: sha256:034479bd9f0e7de5756511070f175e82f4b2c46a3a50691a5adc75ec72cf9f02 size: 1379
Lambda + カスタムイメージを使用する CodeBuild プロジェクトを作成し実行
特にオプションを指定せずに M1 Mac 環境でイメージを取得していました。 念の為次の記事を参考にさせて頂き、イメージのアーキテクチャーを事前に確認しています。
% docker images REPOSITORY TAG IMAGE ID CREATED SIZE rust latest ee95a1a43dfd 8 days ago 1.78GB 748796684458.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0320reg latest ee95a1a43dfd 8 days ago 1.78GB public.ecr.aws/sam/build-dotnet8 latest-arm64 b6c0e310039b 3 weeks ago 2.76GB ghcr.io/rancher-sandbox/rancher-desktop/rdx-proxy latest 6bd31b8fe6c5 N/A 4.98MB % docker inspect ee95a1a43dfd | jq -r '.[] | .Architecture' arm64
ARM Lambda タイプで作成してみます。
ビルドコマンドは何でも良いのですが、Cargo のバージョンでも確認しておきますか。
ビルドプロジェクトを作成後、開始してみました。
Cargo のバージョンが出力されていることが確認出来ます。カスタムイメージが使用されていますね。
さいごに
本日は AWS CodeBuild の Lambda コンピューティング環境でもカスタムイメージを使えるようになり、マネージド型イメージに含まれていないツールも使いやすくなったので、Rust 公式イメージを使って実際に確認してみました。
外部レジストリが使えなかったり、CodeBuild Lambda の制限事項は相変わらずありますが、ユースケースが少し広がったのではないでしょうか。